package com.fuce.one.deploy.controller.admin;

import cn.hutool.setting.Setting;
import com.fuce.one.deploy.common.base.AjaxResult;
import com.fuce.one.deploy.common.base.TomcatVo;
import com.fuce.one.deploy.util.FileUtils;
import com.fuce.one.deploy.util.TomcatUtil;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * tomcat配置Controller
 */

@RequestMapping("/TomcatConfigController")
@Controller
public class TomcatConfigController {
    private String prefix = "admin/tomcat";

    /**
     * tomcat 首页
     * @param map
     * @return
     * @author fuce
     * @Date 2020年3月2日 上午12:10:11
     */
    @GetMapping("/view")
    public String view(ModelMap map) {
        return prefix+"/config";
    }

    /**
     * tomcat 新增
     * @param map
     * @return
     * @author fuce
     * @Date 2020年3月2日 上午12:10:11
     */
    @GetMapping("/add")
    public String add(ModelMap map) {
        return prefix+"/add";
    }

    /**
     * tomcat分页展示
     * @param map
     * @return
     * @author fuce
     * @Date 2020年3月5日 下午2:15:38
     */
    @PostMapping("/list")
    @ResponseBody
    public Object list(ModelMap map) {
        try {

            Map<String,Object> map2=new HashMap<String, Object>();

            List<Map<String, Object>> list = new ArrayList<>();
            Setting setting = new Setting("config/config.setting");

            List<String> groups = setting.getGroups();
            for (int i = 0; i < groups.size(); i++) {
                Map<String, Object> result = new HashMap<>();
                String groupName = groups.get(i);
                String address = setting.getByGroup("address", groupName);
                String url = setting.getByGroup("url", groupName);
                result.put("tomcatName", groupName);
                result.put("tomcatAddress", address);
                result.put("tomcatUrl", url);
                list.add(result);
            }
            map2.put("total", list.size());
            map2.put("rows", list);
            return map2;
        } catch (Exception e){
            e.printStackTrace();
            return AjaxResult.error("查询失败");
        }
    }
    
    /**
     * 更新war跳转地址
     * @param map
     * @return
     * @author fuce
     * @Date 2020年3月3日 上午3:20:37
     */
    @GetMapping("/viewWar")
    public String ViewWar(ModelMap map) {
        return prefix+"/viewWar";
    }
    
    /**
     * 更新war上传操作
     * @param map
     * @return
     * @author fuce
     * @Date 2020年3月3日 上午3:20:43
     */
    @GetMapping("/putWar")
    public String putWar(ModelMap map) {
        return prefix+"/putWar";
    }
    
    /**
     * 添加项目war
     * @param file
     * @param tomcatName
     * @return
     * @throws IOException
     * @author fuce
     * @Date 2020年3月5日 下午2:15:25
     */
    @PostMapping("/addWar/{tomcatName}")
    @ResponseBody
    public AjaxResult addWar(MultipartFile file, @PathVariable("tomcatName") String tomcatName) throws IOException {
        boolean save = FileUtils.save(file, tomcatName);
        if (save) {
            return AjaxResult.success("上传成功");
        }
        return AjaxResult.error("上传失败");
    }
    
    /**
     * 部署magger.war到tomcat
     * @return
     * @author fuce
     * @Date 2020年3月5日 下午2:16:10
     */
    @GetMapping("/putManager/{tomcatName}")
    @ResponseBody
    public AjaxResult putManager(@PathVariable("tomcatName") String tomcatName) {
        boolean b = TomcatUtil.putManager(tomcatName);
        if (b) {
            return AjaxResult.success("上传成功");
        }
        return AjaxResult.error("上传失败");
    }

    /**
     * 创建新的tomcat
     * @param tomcatVo
     * @return
     */
    @PostMapping("/saveTomcat")
    @ResponseBody
    public AjaxResult saveTomcat(TomcatVo tomcatVo){

        boolean b = TomcatUtil.saveTomcat(tomcatVo);
        if (b) {
            return AjaxResult.success("上传成功");
        }
        return AjaxResult.error("上传失败");
    }

    /**
     * 移除tomcat(未开发完成)
     * @return
     */
    @GetMapping("/cancelTomcat/{tomcatName}")
    @ResponseBody
    public AjaxResult cancelTomcat(@PathVariable("tomcatName") String tomcatName){
        boolean b = TomcatUtil.cancelTomcat(tomcatName);
        if (b) {
            return AjaxResult.success("操作成功");
        }
        return AjaxResult.error("操作失败");
    }
    
}